/*
 * Copyright (C) 2012 CyberAgent
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package cn.jarlen.photoedit.filter.single;

import android.opengl.GLES20;

import cn.jarlen.photoedit.filter.base.GPUImageFilter;


public class GPUImageTwoPassTextureSamplingFilter extends GPUImageTwoPassFilter
{
	public GPUImageTwoPassTextureSamplingFilter(String firstVertexShader,
			String firstFragmentShader, String secondVertexShader,
			String secondFragmentShader)
	{
		super(firstVertexShader, firstFragmentShader, secondVertexShader,
				secondFragmentShader);
	}

	@Override
	public void onInit()
	{
		super.onInit();
		initTexelOffsets();
	}

	protected void initTexelOffsets()
	{
		float ratio = getHorizontalTexelOffsetRatio();
		GPUImageFilter filter = mFilters.get(0);
		int texelWidthOffsetLocation = GLES20.glGetUniformLocation(
				filter.getProgram(), "texelWidthOffset");
		int texelHeightOffsetLocation = GLES20.glGetUniformLocation(
				filter.getProgram(), "texelHeightOffset");
		filter.setFloat(texelWidthOffsetLocation, ratio / mOutputWidth);
		filter.setFloat(texelHeightOffsetLocation, 0);

		ratio = getVerticalTexelOffsetRatio();
		filter = mFilters.get(1);
		texelWidthOffsetLocation = GLES20.glGetUniformLocation(
				filter.getProgram(), "texelWidthOffset");
		texelHeightOffsetLocation = GLES20.glGetUniformLocation(
				filter.getProgram(), "texelHeightOffset");
		filter.setFloat(texelWidthOffsetLocation, 0);
		filter.setFloat(texelHeightOffsetLocation, ratio / mOutputHeight);
	}

	@Override
	public void onOutputSizeChanged(int width, int height)
	{
		super.onOutputSizeChanged(width, height);
		initTexelOffsets();
	}

	public float getVerticalTexelOffsetRatio()
	{
		return 1f;
	}

	public float getHorizontalTexelOffsetRatio()
	{
		return 1f;
	}
}
